home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
081-090
/
amok85
/
streams
/
filestreams.mod
next >
Wrap
Text File
|
1993-11-04
|
4KB
|
135 lines
(*------------------------------------------
:Program. FileStreams
:Author. Dieter Bogdoll [db]
:Address. SMail: Gudrunstr. 7, D-8000 München 19
:Address. EMail: landon@amc.zer
:Address. EMail: 2:246/221.3@fidonet
:Address. EMail: bogdoll@informatik.tu-muenchen.de
:Version. V1.0
:Date. 19-Feb-1993
:Copyright. Public Domain
:Language. Oberon
:Translator. Amiga Oberon 3.00d
:Contents. Erweiterung von Streams fuer Fileein/ausgaben
:Imports. Streams [db]
:History. V0.0 [db] 15-Feb-1993 : Erstellt
:History. V1.0 [db] 19-Feb-1993 : Gebrauchsfertig
--------------------------------------------*)
MODULE FileStreams;
(* $OvflChk- $RangeChk- $NilChk- $ReturnChk- $CaseChk- *)
IMPORT e:=Exec, y:=SYSTEM, d:=Dos, S := Streams, FS:=FileSystem;
CONST
eof = 1CX;
TYPE
FileStream* = POINTER TO FileStreamDesc;
FileStreamDesc* = RECORD (S.StreamDesc)
me*: FS.File;
END; (* abstract *)
PROCEDURE (f: FileStream) Open* (name: ARRAY OF CHAR; new: BOOLEAN): BOOLEAN;
BEGIN
RETURN FS.Open(f.me, name, new);
END Open;
PROCEDURE (f: FileStream) Close* (): BOOLEAN;
BEGIN
RETURN FS.Close(f.me)
END Close;
PROCEDURE (f: FileStream) Write* (ch: CHAR);
BEGIN
IF FS.WriteChar(f.me,ch) THEN END;
END Write;
PROCEDURE (f: FileStream) WriteLn*;
END WriteLn;
PROCEDURE (f: FileStream) WriteString* (a: ARRAY OF CHAR);
VAR bool : BOOLEAN;
BEGIN
bool := FS.WriteString(f.me,a);
END WriteString;
PROCEDURE (f: FileStream) WriteShortInt* (value: SHORTINT; width: INTEGER);
VAR bool : BOOLEAN;
BEGIN
(* width ist hier nur ein Dummy *)
bool := FS.WriteChar(f.me,CHR(value-MIN(SHORTINT)));
END WriteShortInt;
PROCEDURE (f: FileStream) WriteInt*(value, width: INTEGER);
VAR data : STRUCT int: INTEGER END;
bool : BOOLEAN;
BEGIN
(* width ist hier nur ein Dummy *)
data.int := value;
bool := FS.WriteBlock(f.me,y.ADR(data),SIZE(data));
END WriteInt;
PROCEDURE (f: FileStream) WriteLongInt*(value: LONGINT; width: INTEGER);
VAR data : STRUCT lint: LONGINT END;
bool : BOOLEAN;
BEGIN
(* width ist hier nur ein Dummy *)
data.lint := value;
bool := FS.WriteBlock(f.me,y.ADR(data),SIZE(data));
END WriteLongInt;
PROCEDURE (f: FileStream) Read* (VAR ch: CHAR);
BEGIN
IF ~FS.ReadChar(f.me,ch) THEN ch:=eof END;
END Read;
PROCEDURE (f: FileStream) ReadString* (VAR a: ARRAY OF CHAR);
VAR bool : BOOLEAN;
BEGIN
bool := FS.ReadString(f.me,a)
END ReadString;
PROCEDURE (f: FileStream) ReadShortInt*(VAR value: SHORTINT): BOOLEAN;
VAR ch: CHAR;
BEGIN
f.Read(ch);
value := SHORT(ORD(ch)+MIN(SHORTINT));
RETURN f.me.status=FS.ok
END ReadShortInt;
PROCEDURE (f: FileStream) ReadInt*(VAR value: INTEGER): BOOLEAN;
VAR data : STRUCT int: INTEGER END;
bool : BOOLEAN;
BEGIN
bool := FS.ReadBlock(f.me,y.ADR(data),SIZE(data));
value := data.int;
RETURN bool
END ReadInt;
PROCEDURE (f: FileStream) ReadLongInt*(VAR value: LONGINT): BOOLEAN;
VAR data : STRUCT lint: LONGINT END;
bool : BOOLEAN;
BEGIN
bool := FS.ReadBlock(f.me,y.ADR(data),SIZE(data));
value := data.lint;
RETURN bool
END ReadLongInt;
PROCEDURE Create*(): FileStream;
(*------------------------------------------
:Input. keine
:Output. liefert ein FileStream, der aber
:Output. noch geoeffnet werden muss
:Update. 20-Feb-1993 [db] - Erstellt
--------------------------------------------*)
VAR f: FileStream;
BEGIN
NEW(f);
RETURN f
END Create;
END FileStreams.